package com.tuliyou.entity;

import com.baomidou.mybatisplus.annotation.*;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.io.Serial;
import java.io.Serializable;

/**
 * 专业实体类（对应数据库majors表）
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
@TableName("majors") // 指定对应数据库表名
public class Major implements Serializable {

    /**
     * 专业代码（主键）
     * 对应表中major_code，非空
     */
    @TableId(value = "major_code", type = IdType.INPUT) // 主键由业务输入（非自增）
    private String majorCode;

    /**
     * 专业名称
     * 对应表中major_name，非空
     */
    @TableField(value = "major_name", exist = true)
    private String majorName;

    /**
     * 上级代码（关联自身主键，1级学科门类→2级专业类→3级具体专业）
     * 对应表中parent_code，可为空
     */
    @TableField(value = "parent_code")
    private String parentCode;

    /**
     * 层级（1-学科门类，2-专业类，3-具体专业）
     * 对应表中level，非空
     */
    @TableField(value = "level", exist = true)
    private Integer level;

    /**
     * 授予学位（如工学学士）
     * 对应表中degree_type，可为空
     */
    @TableField(value = "degree_type")
    private String degreeType;

    /**
     * 修业年限（如4年）
     * 对应表中years，可为空
     */
    @TableField(value = "years")
    private String years;

    /**
     * 核心课程
     * 对应表中core_courses（TEXT类型），可为空
     */
    @TableField(value = "core_courses")
    private String coreCourses;

    /**
     * 就业方向
     * 对应表中employment_dir（TEXT类型），可为空
     */
    @TableField(value = "employment_dir")
    private String employmentDir;

    /**
     * 逻辑删除标记（0未删除，1已删除）
     * 对应表中is_deleted，默认0
     */
    @TableLogic // MyBatis-Plus逻辑删除注解：自动过滤is_deleted=1的记录
    @TableField(value = "is_deleted", fill = FieldFill.INSERT)
    private Integer isDeleted = 0;

    /**
     * 序列化版本号（必须实现Serializable，避免分布式场景序列化异常）
     */
    @Serial
    private static final long serialVersionUID = 1L;
}